lexer grammar AnalisisLexer;

options {
  language = Java;
}

@header{

  package practicaspl.siete;
}

@members{
  private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
  public ArrayList<RecognitionException> getErrors() {
    return errors;
  }
  @Override
  public void reportError (RecognitionException e) {
     String msg = getErrorMessage(e, getTokenNames());
     System.err.println(msg);
     errors.add(e);
  }
}

 ELSE : 'else'; 
 fragment NUEVA_LINEA: '\r\n' ;
 fragment DIGITO: '0'..'9';
 FOR : 'for';
 STRING :'"'(options {greedy=false;}: .)* '"';
 //ARGU : PARENTA(options {greedy=false;}: .)* PARENTC+;
 VAR : DOLLAR (DOLLAR|DIGITO) (PUNTO (LETRA|DIGITO)*)? ;
 STRUCT : 'struct';
 WHILE : 'while';
 TYPE : 'typedef';
 TYP : 'type';
 INT : 'int ';
 VOID : 'void';
 RETURN : 'return';
 CHAR : 'char';
 BLANCO: (' '|'\t'|NUEVA_LINEA) {skip();};
 DEFINE : 'define';
 INCLUDE : 'include';
 IF : 'if';
 DOUBLE :  'double';
 TOKEN : 'token';
 LETRA : ('a'..'z')|('A'..'Z');
 LEFT : 'left';
 EXTERN : 'extern';
 MAIN : 'main';
 CONT : 'continue';
 BREAK :  'break';
 PUNTO : '.';
 SEPARADOR : '%';
 SEPABLOQUE : '%%';
 AND : '&&';
 RANGODIG : DIGITO '-' DIGITO (DIGITO '-' DIGITO )?;
 RANGOLETRA : LETRA '-' LETRA ( LETRA '-' LETRA)?;
 COMENTARIO : '/*' (options {greedy=false;}:.)* '*/'{$channel=HIDDEN;};
 IDENT: LETRA(LETRA|DIGITO)*;
 DEPEND : IDENT PUNTO IDENT;
 PROC: '%{'| '%}';
 COLON : ':';
 SEMICOLON : ';';
 LLAVEA : '{';
 LLAVEC : '}';
 PARENTA : '(';
 PARENTC : ')';
 BARRA: '|';
 CORCHETEA : '[';
 CORCHETEC : ']';
 DIV :  '/';
 MENOS : '-';
 COMA: ',';
 AST : '*';
 MAS : '+';
 IGUAL : '=';
 //STRING : '"' (.)* '"';
 NUMERO : (DIGITO)*;
 DIGP : NUMERO PUNTO;
 ALMOHADILLA : '#';
 MM : '>' | '<'|'<='|'>=';
 COMILLA : '\''; 
 DOLLAR : '$';
 BARINV : '\\';
 BLANCO2 : COMILLA COMILLA;
 
 